import os
import uuid

from django.conf import settings
from django.shortcuts import render, redirect, reverse

from App.models import UserModel, PhotoModel


# Create App views here.


def index1(request):

    return render(request, 'index1.html')


def index2(request):

    return render(request, 'index2.html')


def upload_one_file(request):
    if request.method == 'GET':
        return render(request, 'upload_one_file.html')
    elif request.method == 'POST':

        # 单文件上传
        username = request.POST.get('username')
        icon = request.FILES.get('icon')
        print(icon)    # “1.jpg” 显示的是文件名，但其实是一个对象
        print(type(icon))   # <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>

        # 1. 将文件存放在media文件夹里
        # 首先要去settings里面配置

        # file_name = icon.name  # name属性是获取文件的名称
        # 我也可以每次都随机生成一个文件名
        # file_name = gen_uuid_name() + icon.name[icon.name.rfind('.'):]
        # os.path.splitext() 将文件路径分割成两部分：文件名和扩展名。这个函数返回一个元组，其中第一个元素是文件名（不包括扩展名），第二个元素是文件的扩展名（包括点号）。
        file_name = gen_uuid_name() + os.path.splitext(icon.name)[-1]
        print(file_name)
        file_path = os.path.join(settings.MEDIA_ROOT, f"image\\{file_name}")  # settings要导入from django.conf import settings
        print(file_path)
        with open(file_path, 'ab') as f:
            for part in icon.chunks():  # chunks()每次取一点出来
                f.write(part)
                f.flush()  # 清空缓存

        # 2. 将该媒体文件的路径，存入到数据库中
        user = UserModel()
        user.name = username
        user.icon = 'image/' + file_name
        user.save()

        return redirect(reverse('show_icon'))


# 通过uuid来得到唯一的图片名称
def gen_uuid_name():
    # 这样即便你上传了两次同一张图片也不会出错
    return str(uuid.uuid4())


# 显示图片
def show_icon(request):
    user = UserModel.objects.get(id=1)
    return render(request, 'show_icon.html', {'user': user})



def upload_many_file(request):
    if request.method == 'GET':
        return render(request, 'upload_many_file.html')

    elif request.method == 'POST':
        # 多文件上传
        username = request.POST.get('username')
        imgs = request.FILES.getlist('imgs')  # 这里必须用getlist()
        print('imgs: ', imgs)

        for img in imgs:
            # 1.把图片存放到static/upload中
            file_name = gen_uuid_name() + os.path.splitext(img.name)[-1]
            file_path = os.path.join(settings.STATICFILES_DIRS[0], f"upload\\{file_name}")
            with open(file_path, 'ab') as f:
                for part in img.chunks():
                    f.write(part)
                    f.flush()

            # 2. 将图片路径存入到数据库中
            photo = PhotoModel()
            photo.img = f"upload\\{file_name}"
            photo.user = UserModel.objects.filter(name=username).first()
            photo.save()

        return redirect(reverse('show_icon'))
